package cn.jdemo.algorithm.sort;

/**
 * 算法的稳定性：若，相同大小的元素，排序之后他们的顺序和原来一致，则稳定
 *
 * 冒泡排序(稳定)
 *     从左往右，比较相邻的两个，若左大于右，则交换；直到第一遍遍历完，最右边为最大值
 *     依次遍历；
 *
 * 选择排序(不稳定)
 *    找最小值，然后替换到首位；
 *    依次找最小值；
 *
 * 插入排序(稳定)
 *    把第一个元素作为已排序序列，之后的元素，从左往右一个一个往排序号的序列中插入；
 *    若存在相同元素，则插入其右边(保证其稳定性)；
 *
 * 希尔排序(不稳定---例：被分组后，有可能相同的元素，右边的被迁移，左边的没有变动)
 *    (1)分组;
 *    (2)每组进行插入排序；
 *    分组规则，（第1次）size/2 = tempSize01；（第2次）size/2/2 = tempSize02 ；
 *             （第3次）size/2/2/2 = tempSize3 ... 直到 tempSize3 == 1为止
 *    希尔排序优化了插入排序的原因？
 *    答:比如[5,4,3,2,1,0]这种倒序序列，再插入排序中，数组末端的0要回到首位置很是费劲，比较和移动元素均需n-1次。
 *
 *  归并排序(分 治)(稳定)
 *      (1) 递归拆分为子序列的过程，递归深度为log2n；
 *      (2) 将两个已经有序的子序列合并成一个有序序列;
 *
 *  快速排序(不稳定)
 *      (1) 找基准值，比基准小的放入左序列，比基准大的放入右序列；
 *
 *  堆排序(不稳定)
 *      (1)创建一个堆，堆首为最大值；()
 *      (2)然后弹出堆首，选出新的队首；
 *      (3)之后一次弹出；
 *
 *  计数排序()
 *      (1)找最大值max和最小值min
 *      (2)开辟新数组，长度为 max-min+1 ;
 *      (3)新数组，每个位置记录所对应元素的出现次数，然后输出；
 *
 *  桶排序(稳定)
 *      (1)找最大值max和最小值min;
 *      (2) (max-min+1) / 桶数,每个桶放对应的元素，对不为空的桶进行排序，然后拼接最终序列；
 *
 *   基数排序(稳定)
 *      (1) 按照元素的位，从低位 逐渐到 高位，比对排序
 *
 *
 * @description
 * @date 2020/12/25
 */
public class AllInOne {
}
